﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Chapter07
{
    public class Code04
    {
        public static void Begin()
        {
            //01 不正确。这个语句仅对于要用于所有版本的信息有效。而且，我们常常希望仅在使用调试版本时输出调度信息。此时应首选Debug.WriteLine()版本。
            //使用Debug.WriteLine()版本还有一个优点：该版本不会编译到发布版本中，从而使最终代码文件变得要小。
            //02
            {
                string[] args = new string[100];
                for (int i = 1; i < 10000; i++)
                {
                    Console.WriteLine("Loop cycle {0}", i);
                    if (i == 5000)
                    {
                        Console.WriteLine(args[999]);
                    }
                }
            }
            //3 错误，finally 块使终会执行，它可能在处理 catch 块之后执行。
            //4
            {
                Orientation myDirectoin;
                for (byte myByte = 2; myByte < 10; myByte++)
                {
                    try
                    {
                        myDirectoin = checked((Orientation)myByte);
                        if ((myDirectoin < Orientation.North) || (myDirectoin > Orientation.West))
                        {
                            throw new ArgumentOutOfRangeException("myByte", myByte, "Value must be between 1 and 4");
                        }
                    }
                    catch (ArgumentOutOfRangeException e)
                    {
                        Console.WriteLine(e.Message);
                        Console.WriteLine("Assigning default value, Orientation.North.");
                        myDirectoin = Orientation.North;
                    }
                    Console.WriteLine("myDirection = {0}", myDirectoin);
                }
            }
        }
    }

    public enum Orientation : byte
    {
        North = 1,
        South = 2,
        East = 3,
        West = 4,
    }
}
